package com.miracle.设计模式.创建型模式.工厂方法模式.案例1_基本;


//客户端测试
public class 工厂方法模式1 {
    public static void main(String[] args) {
        //抽象工厂实现方案1：需要为每个具体产品创建一个具体工厂
        LoggerFactory factory;//抽象工厂
        Logger logger;//抽象产品

        factory = new FileLoggerFactory();//创建具体工厂，换成 new DatabaseLoggerFactory() 即可创建数据库日志记录器
        logger = factory.getLogger();//创建具体产品
        logger.writeLog();
        //如果要添加新的日志记录器，只要增加新的具体工厂类，并在客户端中修改具体工厂的类名便可以，从而避免了对原类的修改

        //------------------------------------------------------
        //抽象工厂实现方案2：只需要创建一个具体工厂（抽象工厂可以不需要），通过反射创建具体产品
        //如果将getLogger(cls)的参数改为配置文件读取，即可实现在不修改代码的情况下修改使用的日志记录器
        LoggerFactory2 factory2 = new LoggerFactory2Impl() ;//抽象工厂
        Logger logger2;//抽象产品

        logger2 = factory2.getLogger(FileLogger.class);//创建具体产品
        logger2.writeLog();

    }
}
